package stream;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * Date:2022/2/21
 * Author:ybc
 * Description:
 */
public class PersonTest {

    /**
     * 1. 第一个队伍只要名字为3个字的成员姓名；存储到一个新集合中。
     * 2. 第一个队伍筛选之后只要前3个人；存储到一个新集合中。
     * 3. 第二个队伍只要姓张的成员姓名；存储到一个新集合中。
     * 4. 第二个队伍筛选之后不要前2个人；存储到一个新集合中。
     * 5. 将两个队伍合并为一个队伍；存储到一个新集合中。
     * 6. 根据姓名创建 Person 对象；存储到一个新集合中。
     * 7. 打印整个队伍的Person对象信息。
     */

    @Test
    public void test(){
        //第一支队伍
        ArrayList<String> one = new ArrayList<>();
        one.add("迪丽热巴");
        one.add("宋远桥");
        one.add("苏星河");
        one.add("石破天");
        one.add("石中玉");
        one.add("老子");
        one.add("庄子");
        one.add("洪七公");
        //第二支队伍
        ArrayList<String> two = new ArrayList<>();
        two.add("古力娜扎");
        two.add("张无忌");
        two.add("赵丽颖");
        two.add("张三丰");
        two.add("尼古拉斯赵四");
        two.add("张天爱");
        two.add("张二狗");
        //第一个队伍只要名字为3个字的成员姓名；存储到一个新集合中。
        List<String> list1 = new ArrayList<>();
        //one.stream().filter(s->s.length()==3).forEach(s->list1.add(s));
        one.stream().filter(s->s.length()==3).forEach(s-> System.out.println(s));
        System.out.println("++++++++++++++++++++++++++++");
        //第一个队伍筛选之后只要前3个人；存储到一个新集合中。
        one.stream().filter(s->s.length()==3).limit(3).forEach(s -> System.out.println(s));
        System.out.println("++++++++++++++++++++++++++++");
        //第二个队伍只要姓张的成员姓名；存储到一个新集合中。
        two.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
        System.out.println("++++++++++++++++++++++++++++");
        two.stream().filter(s -> s.startsWith("张")).skip(2).forEach(s -> System.out.println(s));
        //将两个队伍合并为一个队伍；存储到一个新集合中。
        Stream.concat(one.stream(), two.stream()).forEach(s -> System.out.println(s));
        System.out.println("++++++++++++++++++++++++++++");
        //根据姓名创建 Person 对象；存储到一个新集合中。
        //Stream.concat(one.stream(), two.stream()).map(s -> new Person(s)).forEach(s -> System.out.println(s));
        //方法引用的格式：对象::方法名
        Stream.concat(one.stream(), two.stream()).map(s -> new Person(s)).forEach(System.out::println);
        Runnable runnable1 = () -> System.out.println();
        Runnable runnable2 = System.out::println;
    }

}
